// 是否允许在项目中引入json文件，默认为false。
import hello from './006try.json'
// 
import { hello as helloStr } from './006try.js'

console.log('hello', hello)
console.log('helloStr', helloStr)

//  declaration设置为true后，会生成.d.ts文件，会对导出的数据进行类型声明。
export class Man {
  name: string
  static sex: string = '男'
  constructor(name: string) {
    this.name = name
  }
  sayHello(name: string) {
    console.log(`${name}你好，我是${this.name}`)
  }
}
/* export declare class Man {
  name: string;
  static sex: string;
  constructor(name: string);
  sayHello(name: string): void;
} */

//  noImplicitAny:是否关闭隐式具有any类型的，类型检查报错提示
// function nameFn(params) {}  // params没有定义类型，隐式具有any类型
let obj = { name: '张三' }
let name = 'name'
// obj[name]  // name是let声明的，可以随便重新定义为，any或者''，隐式具有any类型

// let str: string = undefined  // noImplicitAny: 

class Human { name: string; constructor(name: string) { this.name = name }  }  // strictPropertyInitialization，不需要构造函数的属性没有初始化值

function hi(num: number) {  // noImplicitReturns为true时，允许函数中存在某种返回路径没有返回值
  if (num < 10) return 1
  else if (num > 10) return 10
}

// ### 2.1、types(重点知识)
// `指定的类型的第三方包能被支持`。值类型：string[]，没有默认值。
// 例如想支持node的第三方包，或者想在 TS 中写CommonJs的语法（例如require('node')），就必须指定要哪些类型的第三方包。
// 首先安装node的声明文件，再指定 TS 支持node的CommonJs语法环境。

// ### 2.2、typeRoots(重点知识)
// `指定所有第三方包声明文件，保存在哪个目录下`。值类型：string[]，没有默认值。
// 你安装了第三包，还要再安装这个包的第三方包的TypeScript的类型声明文件，
// 同时指定这些声明文件保存在哪个目录下。
// npm install @types/node -D
// npm install lodash
// npm install @types/lodash -D
// types: ["node"],
// typeRoots: ["node_modules/@types"]

import lodash from 'lodash'  // 指定了typeRoots: ["node_modules/@types"]， 安装了@types/node，才不会出现，没有类型声明文件的报错
const lod = require('lodash')  // 安装了lodash，@types/lodash，还指定了要支持的语法环境types: ["node"]，才不会报错

import { StringUtil } from "@/2chapter/005class类与type/0051class类"  // 路径别名只在编辑器中能提示，vite在打包和构建时会编译处理，ts-node直接运行好像不行
console.log("StringUtil", StringUtil)

export {}